10
תגובות

עזרה עם מחלקה

פתח razand ,
אני רוצה לעשות מחלקה של הגדרות ומחלקה של מסד נתונים.
עכשיו זה הקוד:
//מסד נתונים
class db extends mysqli
{
    private $connected = false;

    public function __construct($host, $user, $pass, $db, $charset)
    {
        parent::__construct($host, $user, $pass, $db);  
        if ($this->connect_error) die("Connection Error: ".$this->connect_error );
        $this->set_charset($charset);
        $this->connected = true;
    }
   
    public function query($query, $resultmode = MYSQLI_STORE_RESULT )
    {
    $res = parent::query($query, $resultmode);
    if($res === false) die("SQL Error: ".$this->error );
    return $res;
  }



  function __destruct()   {    if($this->connected) $this->close(); }
}
//הגדררות
class setting{
  public function setting($text){
     $sql = $mysqli->query("SELECT * FROM `setting` WHERE name='".$text."'");
    $sql = $sql->fetch_array();
    echo $sql['num'];
  }
}


ואני לא מבין למה הפונקציה setting לא עובדת
אם אפשר עזרה,
תודה

10 תשובות

avatar ענה razand ב 08 לאוגוסט 2012 #

נ.ב לקובץ הזה יש include לדף אחד שבו מתחילים את החיבור למסד ויוצרים את המחלקות.

avatar ענה Y_Y ב 08 לאוגוסט 2012 #

אין לך שום קשר מבני בין setting לבין db..
setting היא לא שכפול לא הרחבה ולא כלום בשביל db
איך אתה רוצה שsetting תדע מה זה query או fetch_array מבלי שהיא תדע מה זה בכלל..
זה שהמחלקות מסודרות באותו קוד לא גורם להם להכיר אחת את השנייה

הפתרון שלך :
1.להכניס את המתודה לתוך db כי אני לא רואה סיבה שהיא תשב בתוך מחלקה בפני עצמה
2.להרחיב את db לsetting ואז להשתמש בתכונות האב שלה

avatar ענה razand ב 08 לאוגוסט 2012 #

הוספתי

extends db
למחקה
אבל אין לי מושג איך להשתמש בתכונות האב שלה..

avatar ענה Y_Y ב 08 לאוגוסט 2012 #

parent::hello_function();


לא הבנתי עוד מה אתה מנסה לבצע ולמה זה יושב כמחלקה

תסביר לעומק ואשמח לעזור

avatar ענה razand ב 09 לאוגוסט 2012 #

אני לומד את הנושא.

$sql = db::query("SELECT * FROM `setting` WHERE name='".$text."'");

עשיתי את זה וזה עדיין לא עובד...

avatar ענה Y_Y ב 09 לאוגוסט 2012 #

ככה זה מתבצע
http://phpguide.co.il/phplive?code=476

לא עובד כי..
query הוא מתודה ממחלקת הMYSQLI ואם תרצה להשתמש בו :
או שתרחיב את MYSQLI לSETTINGS ואז תשמש בו עם PARENT כמו שרשמתי
או שתיצור מתודה בתוך DB שמקבלת את השאילתא ורק מריצה ,זאת אומרת הרחבה של DB לSETTINGS

תשחק עם מה ששלחתי תבין יותר

avatar ענה razand ב 09 לאוגוסט 2012 #

הלכתי על ההרחבה של הMYSQLI.
ביצעתי ככה:

$sql = mysqli::query("SELECT * FROM `setting` WHERE name='".$text."'");

וזה עובד קודם כל תודה!

אבל איך לעשות את זה עם ה fetch_array?

avatar ענה iiddaannyy ב 09 לאוגוסט 2012 #

אין סיבה ש-setting תירש מ-mysqli. היא לא מחלקת-בת, היא לא משתייכת ל-mysqli והיא לא מרחיבה את mysqli.
או שתשתמש ב-singleton או שתעביר את mysqli$ כפרמטר ותשתמש בו.

avatar ענה razand ב 10 לאוגוסט 2012 #

איך להעביר את ה $mysqli כפרמטר?

avatar ענה intval ב 10 לאוגוסט 2012 #

<?php
class whatever
{
  private $sqlConnection;

  public function __construct(mysqli $sqlConnection)
  {
    $this->sqlConnection = $sqlConnection;
  }

  public function doWhatEver()
  {
    $this->sqlConnection->query('select blabla');
  }
}